package com.umfwechat.util.wx;

//import com.umpay.sysCommon.model.Sys;

import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.sf.json.JSONException;
import net.sf.json.JSONObject;

/**
 * @author: py
 * @version:2016年12月21日 下午2:56:21 * qwy.wx.uitl.group.GroupUtil.java
 * @Desc 创建分组
 * 一个公众账号，最多支持创建100个分组。
 * http请求方式: POST（请使用https协议）
	https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN
	POST数据格式：json
	POST数据例子：{"group":{"name":"test"}}
 */
public class weChatGroupUtil {
	
	private static Logger logger = LoggerFactory.getLogger(weChatGroupUtil.class);
	
	//创建分组
	public static String createGroup_url="https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN";
	//查询所有分组
	public static String getGroup_url="https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN";
	//删除分组
	public static String deleteGroup_url="https://api.weixin.qq.com/cgi-bin/groups/delete?access_token=ACCESS_TOKEN";
	//移动用户分组
	public static String addUserGroup_url="https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=ACCESS_TOKEN";
	//查询用户所在分组
	public static String getUserGroup_url="https://api.weixin.qq.com/cgi-bin/groups/getid?access_token=ACCESS_TOKEN";
	
	
	
	/**
	 * @date 2016年12月21日下午3:05:41
	 * @param token
	 * @param groupNme void
	 * @Des:创建分组
	 *	 * 成功则返回：
	 * {
		    "group": {
		        "id": 107,		        "name": "test"
		    }
		}
		失败则返回:
		errcode
	 */
	public static Map<String,Object> createGroup(String token, String groupNme){
		Map<String,Object> map=new HashMap<String, Object>();
		String json = "{\"group\":{\"name\":\""+groupNme+"\"}}";
		String requestUrl = createGroup_url.replace("ACCESS_TOKEN", token);
		logger.info("======创建分组======token="+token);
		JSONObject jsonObject = WeixinHttpClientUtils.httpRequest(requestUrl, "POST", json);
		logger.info("jsonObject======查询所有分组输出结果======"+jsonObject);
		if (null != jsonObject) {
			try {
				boolean containsValue = jsonObject.containsKey("errcode");
				if(containsValue){
					String errcode = jsonObject.getString("errcode");
					map.put("retCode","0");
					map.put("errcode",errcode);
				}
				boolean containsValue1 = jsonObject.containsKey("group");
				if(containsValue1){
					String group = jsonObject.getString("group");
					map.put("retCode","0000");
					map.put("group",group);
				}
			} catch (JSONException e) {
				e.printStackTrace();
				map.put("retCode","0");
			}
		}
		return map;
		
	}
	/**
	 * http请求方式: GET（请使用https协议）
	   https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN
	 * @param token	 
	 * @date 2016年12月21日下午3:09:58 void
	 * @Des:查询所有分组
	 */
	public static Map<String,Object> getGroup(String token){
		Map<String,Object> map=new HashMap<String, Object>();
		String requestUrl=getGroup_url.replace("ACCESS_TOKEN", token);
		logger.info("======查询所有分组输入参数======token="+token);
		JSONObject jsonObject = WeixinHttpClientUtils.httpRequest(requestUrl,"GET", null);
		logger.info("jsonObject======查询所有分组输出结果======"+jsonObject);
		if (null != jsonObject) {
			try {
				boolean containsValue = jsonObject.containsKey("errcode");
				if(containsValue){
					String errcode = jsonObject.getString("errcode");
					map.put("retCode","0");
					map.put("errcode",errcode);
				}
				boolean containsValue1 = jsonObject.containsKey("groups");
				if(containsValue1){
					String groups = jsonObject.getString("groups");
					map.put("retCode","0000");
					map.put("groups",groups);
				}
			} catch (JSONException e) {
				e.printStackTrace();
				map.put("retCode","0");
			}
		}
	    return map;
	}
	
	/**
	 * @date 2016年12月21日下午3:15:45
	 * @param token
	 * @param id void
	 * @Des:删除分组
	 */
	public static Map<String,Object> deleteGroup(String token,int id){
		Map<String,Object> map=new HashMap<String, Object>();
		String json = "{\"group\":{\"id\":"+id+"}}";
		String requestUrl = deleteGroup_url.replace("ACCESS_TOKEN", token);
		logger.info("=======删除分组输入参数======token="+token+"=====id"+id);
		JSONObject jsonObject = WeixinHttpClientUtils.httpRequest(requestUrl,"POST", json);
		logger.info("jsonObject======删除分组输出结果======"+jsonObject);
		if (null != jsonObject) {
			try {
				boolean containsKeyerrcode = jsonObject.containsKey("errcode");
				if (containsKeyerrcode) {
					if (0 != jsonObject.getInt("errcode")) {
						map.put("retCode","0");
						map.put("retMsg","删除分组失败");
					}else{
						map.put("retCode","0000");	
						map.put("retMsg","删除分组成功");
					}
				}
			} catch (JSONException e) {
				e.printStackTrace();
				map.put("retCode","0");
				map.put("retMsg","删除分组失败");
			}
		}
		return map;
	}
	
	/**
	 * @date 2016年12月21日下午3:26:46
	 * @param token
	 * @param openid
	 * @param to_groupid void
	 * @Des:移动用户分组
	 */
	public static boolean addUserGroup(String token,String openid,int to_groupid){
		int result = 0;
		String json ="{\"openid\":\""+openid+"\",\"to_groupid\":"+to_groupid+"}";
		String requestUrl = addUserGroup_url.replace("ACCESS_TOKEN", token);
		logger.info("json======移动用户分组输入参=======!!!!!!!!!!!!!"+json);
		JSONObject jsonObject = WeixinHttpClientUtils.httpRequest(requestUrl,"POST", json);
		logger.info("jsonObject======移动用户分组输出结果=======!!!!!!!!!!!!!"+jsonObject);
		if (null != jsonObject) {
			try {
				System.out.println("GroupUtil|addUserGroup|jsonObject.toString():"+jsonObject.toString());
				boolean containsKeyerrcode = jsonObject.containsKey("errcode");
				if (containsKeyerrcode) {
					if (0 != jsonObject.getInt("errcode")) {
						result = jsonObject.getInt("errcode");
						System.out.println("GroupUtil|addUserGroup|errcode:"+result);
					    return false;
					}else{
						return true;
					}
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return true;
	
	}
	
	/**
	 * @date 2016年12月21日下午3:26:46
	 * @param token
	 * @param openid
	 * @param to_groupid void
	 * @Des:查询用户所在分组
	 */
	public static Map<String,Object> getUserGroup(String token,String openid){
		
		Map<String,Object> map=new HashMap<String, Object>();
		String json ="{\"openid\":\""+openid+"\"}";
		String requestUrl = getUserGroup_url.replace("ACCESS_TOKEN", token);
		logger.info("======查询用户所在分组======token="+token);
		JSONObject jsonObject = WeixinHttpClientUtils.httpRequest(requestUrl,"POST", json);
		logger.info("jsonObject======查询用户所在分组======"+jsonObject);
		if (null != jsonObject) {
			try {
				boolean containsValue = jsonObject.containsKey("errcode");
				if(containsValue){
					String errcode = jsonObject.getString("errcode");
					map.put("retCode","0");
					map.put("errcode",errcode);
				}
				boolean containsValue1 = jsonObject.containsKey("groupid");
				if(containsValue1){
					String group = jsonObject.getString("groupid");
					map.put("retCode","0000");
					map.put("groupid",group);
				}
			} catch (JSONException e) {
				e.printStackTrace();
				map.put("retCode","0");
			}
		}
		return map;
	
	}

}
